#!/usr/bin/perl

@field=([],[]);
@LENGTH_OF_ARG=4;
@ERROR=0;
@RULES="ПРАВИЛА ЗАПОЛНЕНИЯ КОРАБЛЕЙ:\n
Координаты:
a) 1-строка-начало(0-9)\n
   2-строка-конец(0-9)\n
   3-столбец-начало(0-9)\n
   4-столбец-конец(0-9)\n
b) Корабль должен быть не длиннее 4 клеток.\n
   Нельзя изгибать корабли.\n 
с)Пример: 0047\n";

sub createField {
  for($i=0; $i<10; $i++){
     for($j=0;$j<10;$j++){
     	$field[$i][$j]=" + ";
     }
  }
}

sub checkPlace {

    if( (($rs != $re)&&($cs!=$ce)) ){
       printf "It's not possible to place ship on diagonal\n";
       $ERROR=1;
    }
    if ( ($rs > $re) || ($cs > $ce) ){
        print "Wrong type of argument! READ RULES!\n";
        $ERROR=1;
    }
    if ( (($re-$rs+1) > 4) || (($ce-$cs+1) > 4) ){
        print "Very long ship! Please read rules\n";
        $ERROR=1;
    }

    for ($i=$rs-1;$i<$re+2;$i++){
       for($j=$cs-1; $j<$ce+2;$j++){
          if ( ($i > -1) && ($i < 10) && ($j > -1) && ($j < 10) ){
             if ( $field[$i][$j] ne " + " ){
                $ERROR=1;
                printf "There is other ship\n";
                last;
              
             }
          }
       }
       last if $ERROR == 1
  
    }
}

sub fillField {
   for ($i=$rs;$i<$re+1;$i++){
       for($j=$cs;$j<$ce+1;$j++){
          $field[$i][$j]="   ";
       }
   }
}

sub printField {
use Term::ANSIColor;
   print "    0  1  2  3  4  5  6  7  8  9  \n";
   print "   ------------------------------ \n";
   for($i=0; $i<10; $i++){
     print " $i|";
     for($j=0;$j<10;$j++){
        if ( $field[$i][$j] ne " + "){
           print color 'blue';
     	   print "$field[$i][$j]";
           print color 'reset';
        }
        else{
           print "$field[$i][$j]";
        }
     }
     print "|\n";
  }
  print "   ------------------------------ \n";
}


createField;
use Term::ANSIColor;
print color 'red';
print "@RULES\n";
print color 'reset';
foreach $arg (@ARGV){
   if  ( (length($arg) != 4) || !( $arg =~ /^[0-9]{4}$/) ){
       print "Wrong argument!\n";
   }
   else{
       $rs = substr $arg, 0, 1;
       $re = substr $arg, 1, 1;
       $cs = substr $arg, 2, 1;
       $ce = substr $arg, 3, 1;
       checkPlace;
       if ($ERROR != 1){
          fillField;
       }
       else{
          $ERROR=0;
       }  
    }
}
printField;
#BATTLESHIP
